/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Control;

import Entidad.Reporte;
import java.util.ArrayList;

/**
 *
 * @author Omar Beltran
 */
public class DES {
    private ArrayList<Reporte> reportes = new ArrayList<>();
    private ArrayList<Reporte> pronosticos = new ArrayList<>();
    private double ST;
    private double BT;
    private double alfa ;
    private  double beta;
     public void Double_exp_smoth(ArrayList<Reporte> Arreglo,int k){
    //ArrayList<Reporte> reportes       
       
         reportes=Arreglo;
         int n ;
       // arreglo donde se registraran las predicciones
        n = reportes.size();
       
       
       
       
       
       alfa = 2/(n+1);
        beta = Math.sqrt(Math.pow(((2/alfa)-1),2)-1);
       //creacion de dos arreglos con el fin de almacenar los St y Bt de cada 
       //fecha para la recursividad
       double[] St = new double[n];
       double[] Bt = new double[n];
       for(int i=0;i<n;i++){
          if(i==0){
              St[i] = 0;
              Bt[i] = 0;
          }
         
           St[i] = (alfa*reportes.get(i).getTemperatura())+(1-alfa)*(St[i-1]+ Bt[i-1]);
           Bt[i] = (beta*(St[i]-St[i-1]))+(1-beta)*(Bt[i-1]);
if(i==n){
              ST=St[i];
              BT=Bt[i];
}
          
       }
       
       /*
        * creacion de dos arreglos con el fin de almacenar los St y Bt de cada
        * fecha para hallar las predicciones
        */
            
       double[] Stpre = new double[k];
       double[] Btpre = new double[k];
       
       for(int i=0;i<k;i++){
           //reporte.get(5).getTemperatura();
          /* if (i==0){
                Stpre[i] = (alfa*reportes.get(i).getTemperatura())+(1-alfa)*(St[n]+ Bt[n]);
                Btpre[i] = (beta*(Stpre[i]-St[n]))+(1-beta)*(Bt[n]); 
           }
           else {
               
                Stpre[i] = (alfa*reportes.get(i).getTemperatura())+(1-alfa)*(Stpre[i-1]+ Btpre[i-1]);
                Btpre[i] = (beta*(Stpre[i]-Stpre[i-1]))+(1-beta)*(Btpre[i-1]);   
               
           }
           */
           //double x = St[n]+(k*Bt[n]);
           double x;
             x = St[n]+((n+i)*Bt[n]);
           Reporte rep = new Reporte(x);
           //pronosticos.add(i, rep);
           pronosticos.add(rep);
       }
       
        for(int j=0;j<k;j++){
            System.out.println(pronosticos.get(j).getTemperatura());
        }   
         
    }
        
}
